// 未完成
#include <bits/stdc++.h>
using namespace std;

int main() {
  int n; // 输入的总数
  cin >> n;

  vector<int> a(2 * n + 10, 0); // 创建一个大小为 2n + 1 的数组，初始化为 0
  for (int i = 1; i <= n; i++) {
    int k; // 当前输入的数
    cin >> k;
    a[k]++; //  标注k有几本，
  }

  int curr = 1;  // 当前处理的位置
  int left = 0;  // 已经阅读的数的数量
  int right = n; // 未阅读的数的数量

  while (a[curr] != 0 || a[curr] == 0 && left + right >= 2) {
    if (a[curr] != 0) { // 如果当前数能阅读
      curr++;           // 移动到下一个位置
      left += a[curr];  // 已阅读数加
      right -= a[curr]; // 未阅读数减
    } else {
      if (left >= 2) { // 如果已阅读数大于等于 2
        left -= 2;     // 减去 2
        curr++;        // 移动到下一个数
        left++;        // 已阅读数加一
      } else if (left + right >= 2) { // 如果已阅读数和未阅读数的总和大于等于 2
        int t = 2 - left; // 计算需要换的数
        left = 0;         // 已阅读数重置为 0
        right -= t;       // 未阅读数减去换的数
        curr++;           // 移动到下一个位置
        left++;           // 已阅读数加一
        // cout << curr << " " << exchangeableVolumes << endl; // 调试输出
      }
    }
  }
  cout << curr - 1; // 输出最后一个已阅读的数

  return 0; // 程序结束
}
